【解決した】UnityのWWWで、ファイル送付時にヘッダー情報付加不可みたいな話
概要
WWWで、サクっとファイルアップロードするサンプルを書こうとして詰まったのでメモまでに。
そもUnityでWWWを使うのが悪手なんだけど、WWWForm.AddBinaryData(…) みたいなのを見かけて、
ああー簡単に書けるんだろうなーきっと、って思ったんだけど、そうでも無かったんだぜばなし。
↑2014/01/30 1:12:48 書き方変えたらちゃんと動いた。 一体何に嵌っていたんだ俺は、、、
参考:
Unityでtwitterに投稿する方法(API1.1)
http://zi-su.blogspot.jp/2014/01/unitytwitterapi11.html
実装
下記はOK.
var data = 何かbyte[]なデータ;
var name = "something.type";
var dataType = "application/type";
WWWForm form = new WWWForm();
form.AddBinaryData(name, data, name, dataType);
var www = new WWW(url, form);
はー簡単っすねえ。
通信も簡単に成功する。 multipart postが走る。
で、じゃあheaderに細工しようー、と思ったんだ、
headerに key:value みたいなのを入れてみようぜーって。
var data = 何かbyte[]なデータ;
WWWForm form = new WWWForm();
form.AddBinaryData(name, data, name, dataType);
var www = new WWW(url, attachData, headers);// こういうのがあれば良いよね
ところが、attachDataを受け入れるスロットが、WWWのコンストラクタには無い。
WWW(url, data, headers) っていうのはあるけど、dataはbodyの中身になるものだ。
っつーことは、WWWForm.AddBinaryData 以外に、ファイルアタッチを行う手段は無いのか!?
→ドキュメント見たけど、無いような気がする
→じゃあ WWWForm.AddBinaryData した後に、formにheaderの情報を足せれば良いんですね!
結果
→じゃあ WWWForm.AddBinaryData した後に、formにheaderの情報を足せれば良いんですね!
そんな方法は無かった。
原因
1.ファイルアタッチを行うルートは、WWW(url, form)しかない。
2.WWWFormの内部のheaderは form.headerでアクセスできるけど、writeは出来ない。
よって、ファイルアタッチの時、WWWクラスを使う以上は、headerに何かの情報を足す事が出来ない。
、、、なーーんか前、WWWでOAuthとかを通れるようにしたとき、似たような目にあったような気がして、
そのときはブレイクスルーがあったような気がするんだけど、、、
form.headers に書き込みできないのツラい。
誰か助けて!! @toru_inoue